﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

using myTutor.Models;
using System.IO;
using System.Data;
using System.Web.Helpers;
using System.Drawing;
using System.Text.RegularExpressions;
using myLibrary;

namespace myTutor.Controllers
{
    [AdminAuthorize]
    public partial class AdminController : Controller
    {
        public ActionResult ManageClasses()
        {
            return View();
        }

        public ActionResult ApproveClasses(string statusId, int? keySearch)
        {
            List<Class> model = null;
            if (keySearch.HasValue)
            {
                model = new List<Class>();
                Class o = Class.GetClassById(keySearch.Value);
                if (o != null && o.Status != "0")
                {
                    model.Add(o);
                    statusId = o.GetStatusId;
                }
                else
                {
                    statusId = "0";
                }
            }
            switch (statusId)
            {
                case "0": ViewBag.SubTitle = "Kết quả tìm kiếm";
                    break;
                case "1": ViewBag.SubTitle = "Lớp chưa được duyệt để đăng";
                    break;
                case "2": ViewBag.SubTitle = "Lớp đang đăng - Có người nhận";
                    break;
                case "3": ViewBag.SubTitle = "Lớp đang đăng - Chưa có người nhận";
                    break;
                case "4": ViewBag.SubTitle = "Lớp đã đóng - Đã có người nhận";
                    break;
                case "5": ViewBag.SubTitle = "Lớp đã đóng - Chưa có người nhận";
                    break;
                case "6": ViewBag.SubTitle = "Lớp đã bị xóa";
                    break;
                default: return RedirectToAction("Error", "Shared");
            }
            model = model ?? Class.GetClasses(statusId);
            return View(model);
        }

        [HttpPost]
        public ActionResult ApproveClasses()
        {
            int searchId = 0;
            try
            {
                searchId = int.Parse(Request.Form["keySearch"]);
            }
            catch { }
            return RedirectToAction("ApproveClasses", new { statusId = "0", keySearch = searchId });
        }

        public ActionResult ManageClass(int id, string function)
        {
            var model = Class.GetClassById(id);
            if (model != null)
            {
                if (!string.IsNullOrEmpty(function))
                {
                    switch (function)
                    {
                        case "unlock": Class.UnlockClass(model.Id);
                            break;
                        case "lock": Class.LockClass(model.Id);
                            break;
                        case "close": Class.CloseClass(model.Id);
                            break;
                        case "reApprove": Class.ReApproveClass(model.Id);
                            break;
                        case "copy": return RedirectToAction("Register", "Class", new { classId = model.Id, anonymous = true });
                        case "delete": Class.DeleteClass(model.Id);
                            break;
                        case "undelete": Class.UndeleteClass(model.Id);
                            break;
                        default: return RedirectToAction("Error", "Shared");
                    }
                    return RedirectToAction("ManageClass", new { id = model.Id });
                }
                return View(model);
            }
            return RedirectToAction("ManageClasses");
        }

        public ActionResult ApproveTransaction(int id, string function)
        {
            var tran = ClassTutorTransaction.GetTransactionById(id);
            if (tran != null)
            {
                switch (function)
                {
                    case "teach": ClassTutorTransaction.SetTeach(id);
                        break;
                    case "cancelTeach": ClassTutorTransaction.SetCancelTeach(id);
                        break;
                    case "close": ClassTutorTransaction.SetClose(id);
                        break;
                    case "open": ClassTutorTransaction.SetOpen(id);
                        break;
                    default:return RedirectToAction("Error", "Shared");
                }
                if (tran.ClassFindingId.HasValue)
                {
                    return RedirectToAction("ManageTutor", "Admin", new { id = tran.ClassFindingId });
                }
                if (tran.ClassId.HasValue)
                {
                    return RedirectToAction("ManageClass", "Admin", new { id = tran.ClassId });
                }
            }
            return RedirectToAction("Error", "Shared");
        }

        public ActionResult ManageTutors()
        {
            return View();
        }

        public ActionResult ApproveTutors(string statusId, int? keySearch)
        {
            List<TutorClassFindingRequest> model = null;
            if (keySearch.HasValue)
            {
                model = new List<TutorClassFindingRequest>();
                TutorClassFindingRequest o = TutorClassFindingRequest.GetTutorClassFindingRequestById(keySearch.Value);
                if (o != null && o.Status != "0")
                {
                    model.Add(o);
                    statusId = o.GetStatusId;
                }
                else
                {
                    statusId = "0";
                }
            }
            switch (statusId)
            {
                case "0": ViewBag.SubTitle = "Kết quả tìm kiếm";
                    break;
                case "1": ViewBag.SubTitle = "Gia sư chưa được duyệt để đăng";
                    break;
                case "2": ViewBag.SubTitle = "Gia sư đang đăng - Có người nhận";
                    break;
                case "3": ViewBag.SubTitle = "Gia sư đang đăng - Chưa có người nhận";
                    break;
                case "4": ViewBag.SubTitle = "Gia sư đã đóng - Đã có người nhận";
                    break;
                case "5": ViewBag.SubTitle = "Gia sư đã đóng - Chưa có người nhận";
                    break;
                case "6": ViewBag.SubTitle = "Gia sư đã bị xóa";
                    break;
                default: return RedirectToAction("Error", "Shared");
            }
            model = model ?? TutorClassFindingRequest.GetTutors(statusId);
            return View(model);
        }

        [HttpPost]
        public ActionResult ApproveTutors()
        {
            int searchId = 0;
            try
            {
                searchId = int.Parse(Request.Form["keySearch"]);
            }
            catch { }
            return RedirectToAction("ApproveTutors", new { statusId = "0", keySearch = searchId });
        }

        public ActionResult ManageTutor(int id, string function)
        {
            var model = TutorClassFindingRequest.GetTutorClassFindingRequestById(id);
            if (model != null)
            {
                if (!string.IsNullOrEmpty(function))
                {
                    switch (function)
                    {
                        case "unlock": TutorClassFindingRequest.UnlockTutor(model.Id);
                            break;
                        case "lock": TutorClassFindingRequest.LockTutor(model.Id);
                            break;
                        case "close": TutorClassFindingRequest.CloseTutor(model.Id);
                            break;
                        case "reApprove": TutorClassFindingRequest.ReApproveTutor(model.Id);
                            break;
                        case "copy": return RedirectToAction("Register", "Tutor", new { tutorId = model.Id, anonymous = true });
                        case "delete": TutorClassFindingRequest.DeleteTutor(model.Id);
                            break;
                        case "undelete": TutorClassFindingRequest.UndeleteTutor(model.Id);
                            break;
                        default: return RedirectToAction("Error", "Shared");
                    }
                    return RedirectToAction("ManageTutor", new { id = model.Id });
                }
                return View(model);
            }
            return RedirectToAction("ManageTutors");
        }


        //--------------------//


        [HttpPost, ValidateInput(false)]
        public ActionResult ManageArticle(Article model, string function, string statusId, int? positionId)
        {
            if (ModelState.IsValid)
            {
                if (string.IsNullOrEmpty(myString.RemoveHtmlTags(model.CustomContent)))
                {
                    ModelState.AddModelError("CustomContent", "Nội dung bài viết không được rỗng.");
                }
                else
                {
                    string errorMessage = null;
                    string path = null;
                    Bitmap resizedBitmap = null;
                    if (model.CustomImageFileName != null && model.CustomImageFileName.ContentLength > 0)
                    {
                        try
                        {
                            string imageFileName = model.ImageFileName;
                            imageFileName = string.IsNullOrEmpty(imageFileName) ? ("Art-" + Guid.NewGuid().ToString() + ".png") : imageFileName;
                            Bitmap original = Bitmap.FromStream(model.CustomImageFileName.InputStream) as Bitmap;

                            int newWidth = 720;
                            int newHeight = 720 * original.Height / original.Width;
                            resizedBitmap = new Bitmap(newWidth, newHeight);
                            Graphics g = Graphics.FromImage(resizedBitmap as Image);
                            g.DrawImage(original, 0, 0, newWidth, newHeight);

                            path = Path.Combine(Server.MapPath("~/Files/Articles"), imageFileName);
                            model.ImageFileName = imageFileName;
                        }
                        catch { }
                    }
                    positionId = model.ArticleCategoryId;
                    switch (function)
                    {
                        case "approve": if (Article.IsValidArtId(model.Id))
                            {
                                errorMessage = Article.ApproveArt(model);
                                ViewBag.ArtId = model.Id;
                            }
                            else
                            {
                                return RedirectToAction("Error", "Shared");
                            }
                            break;
                        case "approveUndelete": if (Article.IsValidArtId(model.Id))
                            {
                                errorMessage = Article.ApproveUndeleteArt(model);
                                ViewBag.ArtId = model.Id;
                            }
                            else
                            {
                                return RedirectToAction("Error", "Shared");
                            }
                            break;
                        case "edit": if (Article.IsValidArtId(model.Id))
                            {
                                errorMessage = Article.UpdateArt(model);
                                ViewBag.ArtId = model.Id;
                            }
                            else
                            {
                                return RedirectToAction("Error", "Shared");
                            }
                            break;
                        case "add": errorMessage = Article.AddArt(model);
                            break;
                        default: return RedirectToAction("Error", "Shared");
                    }
                    if (string.IsNullOrEmpty(errorMessage))
                    {
                        if (resizedBitmap != null)
                        {
                            resizedBitmap.Save(path, System.Drawing.Imaging.ImageFormat.Png);
                        }
                        if (function == "add")
                        {
                            string message = "Thông tin đã được ghi nhận thành công. Bạn có thể tiếp tục thêm bài viết mới!";
                            return RedirectToAction("ManageArticle", new { function = function, statusId = statusId, positionId = positionId, message = message });
                        }
                        else
                        {
                            return RedirectToAction("ApproveArticles", new { statusId = statusId, positionId = positionId });
                        }
                    }
                    ModelState.AddModelError("", errorMessage);
                }
            }
            ViewBag.SubTitle = Request.Form["subTitle"];
            ViewBag.Function = function;
            ViewBag.StatusId = statusId;
            ViewBag.PositionId = positionId;
            return View(model);
        }

        public ActionResult ManageArticle(int? artId, string function, string statusId, int? positionId, string message)
        {
            ViewBag.ArtId = artId;
            ViewBag.Function = function;
            ViewBag.StatusId = statusId;
            ViewBag.PositionId = positionId;
            ViewBag.Message = message;
            switch (function)
            {
                case "approve":
                case "approveUndelete":
                case "edit": if (!Article.IsValidArtId(artId.Value))
                    {
                        return RedirectToAction("Error", "Shared");
                    }
                    else
                    {
                        ViewBag.SubTitle = "Chỉnh sửa bài viết";
                        return View(Article.GetArtById(artId.Value));
                    }
                case "add": ViewBag.SubTitle = "Thêm bài viết";
                    var newArt = new Article();
                    if (positionId.HasValue && ArticleCategory.IsValidCategoryId(positionId.Value))
                    {
                        newArt.ArticleCategoryId = positionId.Value;
                    }
                    return View(newArt);
                case "lock": if (!Article.IsValidArtId(artId.Value))
                    {
                        return RedirectToAction("Error", "Shared");
                    }
                    else
                    {
                        Article.LockArt(artId.Value);
                    }
                    break;
                case "delete": if (!Article.IsValidArtId(artId.Value))
                    {
                        return RedirectToAction("Error", "Shared");
                    }
                    else
                    {
                        Article.DeleteArt(artId.Value);
                    }
                    break;
                case "undelete": if (!Article.IsValidArtId(artId.Value))
                    {
                        return RedirectToAction("Error", "Shared");
                    }
                    else
                    {
                        Article.UndeleteArt(artId.Value);
                    }
                    break;
                case "unlock": if (!Article.IsValidArtId(artId.Value))
                    {
                        return RedirectToAction("Error", "Shared");
                    }
                    else
                    {
                        Article.UnlockArt(artId.Value);
                    }
                    break;
                default: return RedirectToAction("Error", "Shared");
            }
            return RedirectToAction("ApproveArticles", new { @statusId = statusId, positionId = positionId });
        }

        public ActionResult ApproveArticles(string statusId, int? positionId)
        {
            if (statusId == "2")
            {
                ViewBag.SubTitle = "Các bài chờ duyệt";
            }
            else if (statusId == "3")
            {
                ViewBag.SubTitle = "Các bài đang đăng";
            }
            else if (statusId == "4")
            {
                ViewBag.SubTitle = "Các bài đã xóa";
            }
            else
            {
                return RedirectToAction("Error", "Shared");
            }
            ViewBag.StatusId = statusId;
            if (positionId.HasValue)
            {
                if (ArticleCategory.IsValidCategoryId(positionId.Value))
                {
                    ViewBag.PositionId = positionId.Value;
                    ViewBag.CategoryName = ArticleCategory.GetCategoryById(positionId.Value).CategoryName;
                    return View(ArticleCategory.GetArticlesById(positionId.Value, statusId));
                }
                return RedirectToAction("Error", "Shared");
            }
            return View(new List<Article>());
        }

        [HttpPost]
        public ActionResult ApproveArticles(string statusId)
        {
            int? positionId = null;
            try
            {
                positionId = int.Parse(Request.Form["positions"]);
            }
            catch { }
            return RedirectToAction("ApproveArticles", new { statusId = statusId, positionId = positionId });
        }

        public ActionResult SearchArticle()
        {
            return View();
        }

        [HttpPost]
        public ActionResult SearchArticle(string keySearch)
        {
            return View(Article.GetArticlesByKeyword(keySearch));
        }

        public ActionResult ManageArticles()
        {
            return View();
        }


        //--------------------//


        public ActionResult ManageSettings()
        {
            Config model = new Config();
            model.PreSiteName = Config.GetPreSiteName();
            model.SiteName = Config.GetSiteName();
            model.ContactName01 = Config.GetContactName("01");
            model.ContactName02 = Config.GetContactName("02");
            model.ContactName03 = Config.GetContactName("03");
            model.ContactAddress01 = Config.GetContactAddress("01");
            model.ContactAddress02 = Config.GetContactAddress("02");
            model.ContactAddress03 = Config.GetContactAddress("03");
            model.ContactPhone01 = Config.GetContactPhone("01");
            model.ContactPhone02 = Config.GetContactPhone("02");
            model.ContactPhone03 = Config.GetContactPhone("03");
            model.ContactYahoo01 = Config.GetContactYahoo("01");
            model.ContactYahoo02 = Config.GetContactYahoo("02");
            model.ContactYahoo03 = Config.GetContactYahoo("03");
            model.SmtpServer = Config.GetSmtpServer();
            model.SmtpServerUserName = Config.GetSmtpServerUserName();
            model.SmtpServerFrom = Config.GetSmtpServerFrom();
            model.SmtpServerTo = Config.GetSmtpServerTo();
            model.RequireEmailConfirmation = Config.GetRequireEmailConfirmation();
            model.NumOfTopClasses = Config.GetNumOfTopClasses();
            model.NumOfTopTutors = Config.GetNumOfTopTutors();
            model.SlideAdvertising = Config.GetSlideAdvertising();
            model.SlideAdsInterval = Config.GetSlideAdsInterval();
            model.SlideAdsStep = Config.GetSlideAdsStep();
            model.KeepOldAds = Config.GetKeepOldAds();
            return View(model);
        }

        [HttpPost]
        public ActionResult ManageSettings(Config model)
        {
            if (ModelState.IsValid)
            {
                if ((model.SmtpServer != Config.GetSmtpServer() || model.SmtpServerUserName != Config.GetSmtpServerUserName()) && string.IsNullOrEmpty(model.SmtpServerPassword))
                {
                    ModelState.AddModelError("SmtpServerPassword", "Chưa cung cấp mật khẩu cho cấu hình webmail mới.");
                }
                else if (!Config.SetPreSiteName(model.PreSiteName))
                {
                    ModelState.AddModelError("PreSiteName", "Dữ liệu không hợp lệ");
                }
                else if (!Config.SetSiteName(model.SiteName))
                {
                    ModelState.AddModelError("SiteName", "Dữ liệu không hợp lệ");
                }
                else if (!Config.SetContactName("01", model.ContactName01))
                {
                    ModelState.AddModelError("ContactName01", "Dữ liệu không hợp lệ");
                }
                else if (!Config.SetContactName("02", model.ContactName02))
                {
                    ModelState.AddModelError("ContactName02", "Dữ liệu không hợp lệ");
                }
                else if (!Config.SetContactName("03", model.ContactName03))
                {
                    ModelState.AddModelError("ContactName03", "Dữ liệu không hợp lệ");
                }
                else if (!Config.SetContactAddress("01", model.ContactAddress01))
                {
                    ModelState.AddModelError("ContactAddress01", "Dữ liệu không hợp lệ");
                }
                else if (!Config.SetContactAddress("02", model.ContactAddress02))
                {
                    ModelState.AddModelError("ContactAddress02", "Dữ liệu không hợp lệ");
                }
                else if (!Config.SetContactAddress("03", model.ContactAddress03))
                {
                    ModelState.AddModelError("ContactAddress03", "Dữ liệu không hợp lệ");
                }
                else if (!Config.SetContactPhone("01", model.ContactPhone01))
                {
                    ModelState.AddModelError("ContactPhone01", "Dữ liệu không hợp lệ");
                }
                else if (!Config.SetContactPhone("02", model.ContactPhone02))
                {
                    ModelState.AddModelError("ContactPhone02", "Dữ liệu không hợp lệ");
                }
                else if (!Config.SetContactPhone("03", model.ContactPhone03))
                {
                    ModelState.AddModelError("ContactPhone03", "Dữ liệu không hợp lệ");
                }
                else if (!Config.SetContactYahoo("01", model.ContactYahoo01))
                {
                    ModelState.AddModelError("ContactYahoo01", "Dữ liệu không hợp lệ");
                }
                else if (!Config.SetContactYahoo("02", model.ContactYahoo02))
                {
                    ModelState.AddModelError("ContactYahoo02", "Dữ liệu không hợp lệ");
                }
                else if (!Config.SetContactYahoo("03", model.ContactYahoo03))
                {
                    ModelState.AddModelError("ContactYahoo03", "Dữ liệu không hợp lệ");
                }
                else if (!Config.SetSmtpServer(model.SmtpServer))
                {
                    ModelState.AddModelError("SmtpServer", "Dữ liệu không hợp lệ");
                }
                else if (!Config.SetSmtpServerUserName(model.SmtpServerUserName))
                {
                    ModelState.AddModelError("SmtpServerUserName", "Dữ liệu không hợp lệ");
                }
                else if ((string.IsNullOrEmpty(model.SmtpServerPassword) ? false : (!Config.SetSmtpServerPassword(model.SmtpServerPassword))))
                {
                    ModelState.AddModelError("SmtpServerPassword", "Dữ liệu không hợp lệ");
                }
                else if (!Config.SetSmtpServerFrom(model.SmtpServerFrom))
                {
                    ModelState.AddModelError("SmtpServerFrom", "Dữ liệu không hợp lệ");
                }
                else if (!Config.SetSmtpServerTo(model.SmtpServerTo))
                {
                    ModelState.AddModelError("SmtpServerTo", "Dữ liệu không hợp lệ");
                }
                else if (!Config.SetRequireEmailConfirmation(model.RequireEmailConfirmation.ToString()))
                {
                    ModelState.AddModelError("RequireEmailConfirmation", "Dữ liệu không hợp lệ");
                }
                else if (!Config.SetNumOfTopClasses(model.NumOfTopClasses.ToString()))
                {
                    ModelState.AddModelError("NumOfTopClasses", "Dữ liệu không hợp lệ");
                }
                else if (!Config.SetNumOfTopTutors(model.NumOfTopTutors.ToString()))
                {
                    ModelState.AddModelError("NumOfTopTutors", "Dữ liệu không hợp lệ");
                }
                else if (!Config.SetSlideAdvertising(model.SlideAdvertising.ToString()))
                {
                    ModelState.AddModelError("SlideAdvertising", "Dữ liệu không hợp lệ");
                }
                else if (!Config.SetSlideAdsInterval(model.SlideAdsInterval.ToString()))
                {
                    ModelState.AddModelError("SlideAdsInterval", "Dữ liệu không hợp lệ");
                }
                else if (!Config.SetSlideAdsStep(model.SlideAdsStep.ToString()))
                {
                    ModelState.AddModelError("SlideAdsStep", "Dữ liệu không hợp lệ");
                }
                else if (!Config.SetKeepOldAds(model.KeepOldAds.ToString()))
                {
                    ModelState.AddModelError("KeepOldAds", "Dữ liệu không hợp lệ");
                }
                else
                {
                    try
                    {
                        if (!string.IsNullOrEmpty(model.SmtpServerPassword))
                        {
                            Config.SetupWebmail();
                            WebMail.Send(to: model.SmtpServerTo, subject: "Test webmail server", body: "Config webmail server successfully!");
                        }
                        ViewBag.Message = "DỮ LIỆU ĐÃ ĐƯỢC CẬP NHẬT THÀNH CÔNG";
                    }
                    catch
                    {
                        ViewBag.Message = "DỮ LIỆU ĐÃ ĐƯỢC CẬP NHẬT. TUY NHIÊN VIỆC TEST WEBMAIL SERVER KHÔNG THÀNH CÔNG";
                    }
                }
            }
            return View(model);
        }


        //--------------------//


        [HttpPost, ValidateInput(false)]
        public ActionResult ManageAdsInfo(AdsInformation model, string function, string statusId, int? positionId)
        {
            if (ModelState.IsValid)
            {
                string errorMessage = null;
                bool isNullCustomContentOriginal = true;
                string path = null;
                string oldAdsSourcePath = null;
                if (model.CustomContentOriginal != null && model.CustomContentOriginal.ContentLength > 0)
                {
                    try
                    {
                        var fileName = ("Ads-" + Guid.NewGuid().ToString());
                        fileName += Path.GetExtension(model.CustomContentOriginal.FileName);
                        path = Path.Combine(Server.MapPath("~/Files/Advertising"), fileName);
                        if (!string.IsNullOrEmpty(model.ContentOriginal))
                        {
                            oldAdsSourcePath = Path.Combine(Server.MapPath("~/Files/Advertising"), model.ContentOriginal);
                        }
                        model.ContentOriginal = fileName;
                        isNullCustomContentOriginal = false;
                    }
                    catch { }
                }
                if (isNullCustomContentOriginal && string.IsNullOrEmpty(model.ContentOriginal))
                {
                    ModelState.AddModelError("CustomContentOriginal", "Chưa chọn tệp nguồn hoặc tệp nguồn không hợp lệ.");
                }
                else
                {
                    positionId = model.AdsPositionId;
                    switch (function)
                    {
                        case "approve": if (AdsInformation.IsValidAdsId(model.Id))
                            {
                                errorMessage = AdsInformation.ApproveAds(model, path, oldAdsSourcePath);
                                ViewBag.AdsId = model.Id;
                            }
                            else
                            {
                                return RedirectToAction("Error", "Shared");
                            }
                            break;
                        case "approveUndelete": if (AdsInformation.IsValidAdsId(model.Id))
                            {
                                errorMessage = AdsInformation.ApproveUndeleteAds(model, path, oldAdsSourcePath);
                                ViewBag.AdsId = model.Id;
                            }
                            else
                            {
                                return RedirectToAction("Error", "Shared");
                            }
                            break;
                        case "edit": if (AdsInformation.IsValidAdsId(model.Id))
                            {
                                errorMessage = AdsInformation.UpdateAds(model, path, oldAdsSourcePath);
                                ViewBag.AdsId = model.Id;
                            }
                            else
                            {
                                return RedirectToAction("Error", "Shared");
                            }
                            break;
                        case "add": errorMessage = AdsInformation.AddAds(model, path);
                            break;
                        default: return RedirectToAction("Error", "Shared");
                    }
                    if (string.IsNullOrEmpty(errorMessage))
                    {
                        if (function == "add")
                        {
                            string message = "Thông tin đã được ghi nhận thành công. Bạn có thể tiếp tục thêm quảng cáo mới!";
                            return RedirectToAction("ManageAdsInfo", new { function = function, statusId = statusId, positionId = positionId, message = message });
                        }
                        else
                        {
                            return RedirectToAction("ApproveAdvertising", new { statusId = statusId, positionId = positionId });
                        }
                    }
                    ModelState.AddModelError("", errorMessage);
                }
            }
            ViewBag.SubTitle = Request.Form["subTitle"];
            ViewBag.Function = function;
            ViewBag.StatusId = statusId;
            ViewBag.PositionId = positionId;
            return View(model);
        }

        [ValidateInput(false)]
        public ActionResult ManageAdsInfo(int? adsId, string function, string statusId, int? positionId, string message)
        {
            ViewBag.AdsId = adsId;
            ViewBag.Function = function;
            ViewBag.StatusId = statusId;
            ViewBag.PositionId = positionId;
            ViewBag.Message = message;
            switch (function)
            {
                case "approve":
                case "approveUndelete":
                case "edit": if (!AdsInformation.IsValidAdsId(adsId.Value))
                    {
                        return RedirectToAction("Error", "Shared");
                    }
                    else
                    {
                        ViewBag.SubTitle = "Chỉnh sửa quảng cáo";
                        return View(AdsInformation.GetAdsById(adsId.Value));
                    }
                case "add": ViewBag.SubTitle = "Thêm quảng cáo";
                    var newAds = new AdsInformation();
                    if (positionId.HasValue && AdsPosition.IsValidPositionId(positionId.Value))
                    {
                        newAds.AdsPositionId = positionId.Value;
                    }
                    return View(newAds);
                case "delete": if (!AdsInformation.IsValidAdsId(adsId.Value))
                    {
                        return RedirectToAction("Error", "Shared");
                    }
                    else
                    {
                        AdsInformation.DeleteAds(adsId.Value);
                    }
                    break;
                case "undelete": if (!AdsInformation.IsValidAdsId(adsId.Value))
                    {
                        return RedirectToAction("Error", "Shared");
                    }
                    else
                    {
                        AdsInformation.UndeleteAds(adsId.Value);
                    }
                    break;
                case "lock": if (!AdsInformation.IsValidAdsId(adsId.Value))
                    {
                        return RedirectToAction("Error", "Shared");
                    }
                    else
                    {
                        AdsInformation.LockAds(adsId.Value);
                    }
                    break;
                case "unlock": if (!AdsInformation.IsValidAdsId(adsId.Value))
                    {
                        return RedirectToAction("Error", "Shared");
                    }
                    else
                    {
                        AdsInformation.UnlockAds(adsId.Value);
                    }
                    break;
                default: return RedirectToAction("Error", "Shared");
            }
            return RedirectToAction("ApproveAdvertising", new { @statusId = statusId, positionId = positionId });
        }

        public ActionResult ApproveAdvertising(string statusId,int? positionId)
        {
            if (statusId == "1")
            {
                ViewBag.SubTitle = "Các quảng cáo đang chạy";
            }
            else if (statusId == "2")
            {
                ViewBag.SubTitle = "Các quảng cáo chuẩn bị chạy";
            }
            else if (statusId == "3")
            {
                ViewBag.SubTitle = "Các quảng cáo hết hạn";
            }
            else if (statusId == "4")
            {
                ViewBag.SubTitle = "Các quảng cáo bị xóa";
            }
            else if (statusId == "5")
            {
                ViewBag.SubTitle = "Các quảng cáo chờ duyệt";
            }
            else
            {
                return RedirectToAction("Error", "Shared");
            }
            var hostUrl = Request.Url.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped) + VirtualPathUtility.ToAbsolute("~/Files/Advertising/");
            ViewBag.HostUrl = hostUrl;
            ViewBag.StatusId = statusId;
            if (positionId.HasValue)
            {
                if (AdsPosition.IsValidPositionId(positionId.Value))
                {
                    ViewBag.PositionId = positionId.Value;
                    return View(AdsPosition.GetAdsInfosById(positionId.Value, statusId));
                }
                return RedirectToAction("Error", "Shared");
            }
            return View(new List<AdsInformation>());
        }

        [HttpPost]
        public ActionResult ApproveAdvertising(string statusId)
        {
            int? positionId = null;
            try
            {
                positionId = int.Parse(Request.Form["positions"]);
            }
            catch { }
            return RedirectToAction("ApproveAdvertising", new { statusId = statusId, positionId = positionId });
        }

        public ActionResult SearchAdsInfo()
        {
            return View();
        }

        [HttpPost]
        public ActionResult SearchAdsInfo(string keySearch)
        {
            return View(AdsInformation.GetAdsInfosByKeyword(keySearch));
        }

        public ActionResult ManageAdvertising()
        {
            return View();
        }


        //--------------------//

        
        public ActionResult UserProfile(string userName)
        {
            UserMaster o = UserMaster.GetUserByUserName(userName);
            if (o != null)
            {
                if (o.IsDeleted == true)
                {
                    ViewBag.StatusId = "3";
                }
                else if (o.Status == "0")
                {
                    ViewBag.StatusId = "0";
                }
                else if (o.Status == "1")
                {
                    ViewBag.StatusId = "1";
                }
                else if (o.Status == "2")
                {
                    ViewBag.StatusId = "2";
                }
                return View(o.UserProfile);
            }
            return RedirectToAction("Error", "Shared");
        }

        public ActionResult ManageUsers()
        {
            return View();
        }

        public ActionResult ManageUser(int userId, string function, string statusId)
        {
            UserMaster o = UserMaster.GetUserById(userId);
            if (o != null)
            {
                if (User.Identity.Name.ToLower() == o.UserName.ToLower())
                {
                    return RedirectToAction("ApproveUsers", new { @statusId = statusId, errorMessage = "Bạn không thể thực hiện quyền quản trị trên tài khoản của bạn" });
                }
            }
            switch (function)
            {
                case "assign":
                     if (o != null)
                     {
                         switch (o.UserType)
                         {
                             case "1": ViewBag.Admin = true;
                                 break;
                             case "2": ViewBag.Class = true;
                                 break;
                             case "3": ViewBag.Tutor = true;
                                 break;
                         }
                         ViewBag.UserName = o.UserName;
                         ViewBag.UserId = userId;
                         ViewBag.StatusId = statusId;
                         return View();
                     }
                     return RedirectToAction("Error", "Shared");
                case "lock": UserMaster.LockUser(userId);
                    break;
                case "delete": UserMaster.DeleteUser(userId);
                    break;
                case "unlock": UserMaster.UnLockUser(userId);
                    break;
                case "undelete": UserMaster.UnDeleteUser(userId);
                    break;
                default: return RedirectToAction("Error", "Shared");
            }
            return RedirectToAction("ApproveUsers", new { @statusId = statusId });
        }

        [HttpPost]
        public ActionResult ManageUser(int userId, string statusId)
        {
            UserMaster o = UserMaster.GetUserById(userId);
            if (o != null)
            {
                if (User.Identity.Name.ToLower() == o.UserName.ToLower())
                {
                    return RedirectToAction("ApproveUsers", new { @statusId = statusId, errorMessage = "Bạn không thể thực hiện quyền quản trị trên tài khoản của bạn" });
                }
                string userType = Request.Form["userType"];
                switch (userType)
                {
                    case "1":
                    case "2":
                    case "3": o.UserType = userType;
                        Db.db.SaveChanges();
                        return RedirectToAction("ApproveUsers", new { @statusId = statusId });
                    default: return RedirectToAction("Error", "Shared");
                }
            }
            return RedirectToAction("Error", "Shared");
        }

        public ActionResult ApproveUsers(string statusId, string errorMessage)
        {
            if (statusId == "0")
            {
                ViewBag.SubTitle = "Các tài khoản chưa kích hoạt";
            }
            else if (statusId == "1")
            {
                ViewBag.SubTitle = "Các tài khoản đang hoạt động";
            }
            else if (statusId == "2")
            {
                ViewBag.SubTitle = "Các tài khoản bị khóa";
            }
            else if (statusId == "3")
            {
                ViewBag.SubTitle = "Các tài khoản đã xóa";
            }
            else
            {
                return RedirectToAction("Error", "Shared");
            }
            ViewBag.ErrorMessage = errorMessage;
            return View(UserMaster.GetUsers(statusId));
        }

        [HttpPost]
        public ActionResult ApproveUsers()
        {
            ViewBag.SubTitle = "Kết quả tìm kiếm";
            string username = Request.Form["userNameSearch"];
            UserMaster o = UserMaster.GetUserByUserName(username);
            List<UserMaster> os = new List<UserMaster>();
            if (o != null)
            {
                os.Add(o);
            }
            return View(os);
        }


        //--------------------//


        public ActionResult Index()
        {
            return View();
        }
    }
}
